本文主要记录全景图像拼接,此记。
1,特征点提取方法有SIFT,SURF,ORB,这三种方法在OpenCV里面都已实现,如果装的是opencv2.0版本,则可以直接用SURF,如果是3.0版本,则需要下载相应的contrib库进行安装。其中SIFT是最为经典的一种,它充分考虑了在图像变换过程中出现的光照、尺度、旋转等变化,但随之而来的是极大的计算量。SURF是加速版的SIFT,SURF基本就是SIFT的全面升级版,有SURF基本就不用考虑SIFT,而ORB的强点在于计算时间,考虑到视频拼接的实时性要求,采用ORB特征点提取。
在对应好相应图像拼接帧后,利用上一章介绍的图像拼接算法进行图像拼接,可以保证图像拼接的质量。但是在保证质量的同时,也要兼顾拼接速度。考虑到实用性,此图像拼接算法耗费的时间过多,根本无法用来做视频拼接,因此需要对算法进行优化,都思路进行拓展。
其中优化措施有以下几点:
固定摄像头位置,保证相机参数不改变。
打开摄像头,采集图像,为了消除摄像头刚开始采集图像时,摄像头之间存在一定的初始化时间差异这一现象,先等待摄像头稳定,再读取摄像头图像帧进行图像拼接,此拼接图像作为视频拼接的背景帧,选取的背景一定要是静态的。
对后续帧序列,由于相机位置是固定的,可以不再进行特征点提取、匹配、筛选以及相机参数计算等步骤,即变换矩阵不再逐帧计算,而是利用背景帧的拼接参数做处理,只对后续帧序列进行图像融合,从而生成拼接视频流。
通过该思路可看出,后续对应帧的拼接速度仅仅取决于图像融合的速度,也即是图像融合的速度决定视频拼接的速度。因为省去了每一对应图像帧的图像配准和图像变换,只进行图像采集,图像预处理和图像融合,大大减少了视频拼接的时间,提高了拼接图像的帧率。在兼顾质量的同时,也提高了速度。
得到背景帧之后,在重合区域内检测是否存在运动的物体,如果存在,则更新背景模板及获得新的拼接参数,如果不存在,则继续使用当前背景帧的相关参数进行后续帧的拼接。
因为检测的代价远远小于模板更新的代价,对每一拼接帧的重合区域进行运动物体检测,有选择性的更新背景模板,将可以极大地提高拼接速度,并且一定程度的地消除运动物体穿过缝合线时产生的虚影。